package com.tang.ack.provider;

import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

/**
 * @author biehl
 * <p>
 * 生产者,生产消息同样需要知道向那个交换器Exchange发送消息的.
 * <p>
 * 这里使用的交换器类型使用的是direct发布订阅模式,
 * 根据配置的路由routing-key来决定,将不同的消息路由到不同的队列queue中。
 * 不同的消息具有相同的路由键，就会进入相同的队列当中去。
 */
@Component
public class RabbitMqLogErrorProduce {

    private final AmqpTemplate rabbitmqAmqpTemplate;

    // 交换器的名称Exchange
    private final String exchange;

    // 路由键routingKey
    private final String routingKey;

    public RabbitMqLogErrorProduce(AmqpTemplate rabbitmqAmqpTemplate,
                                   @Value(value = "${rabbitmq.config.exchange}") String exchange,
                                   @Value(value = "${rabbitmq.config.queue.error.routing.key}") String routingKey) {
        this.rabbitmqAmqpTemplate = rabbitmqAmqpTemplate;
        this.exchange = exchange;
        this.routingKey = routingKey;
    }

    /**
     * 发送消息的方法
     *
     * @param msg 发送消息
     */
    public void producer(String msg) {
        // 向消息队列发送消息
        // 参数1,交换器的名称
        // 参数2,路由键
        // 参数3,消息
        this.rabbitmqAmqpTemplate.convertAndSend(this.exchange, this.routingKey, msg);
    }
}